package com.kaifamiao.service;

import com.kaifamiao.exception.ServiceException;

import java.util.Map;

public interface TokenService {

    /**
     * 根据给定的内容(字符串)创建 JSON Web Token
     * @param content 需要放入到载荷(payload)中的字符串
     * @return 返回 JSON Web Token
     * @throws ServiceException 若创建时发生错误则抛出该异常
     */
    String generate(String content) throws ServiceException;

    /**
     * 根据给定的内容(Map)创建 JSON Web Token
     * @param map 需要放入到载荷(payload)中的数据
     * @return 返回 JSON Web Token
     * @throws ServiceException 若创建失败则抛出该异常
     */
    String generate(Map<String, Object> map) throws ServiceException;

    /**
     * 校验 JSON Web Token
     * @param token 被校验的JWT
     * @return 仅当通过校验时返回 true
     * @throws ServiceException 若校验发生错误则抛出该异常
     */
    boolean verify(String token) throws ServiceException;

    /**
     * 根据 JSON Web Token 获得 payload (以字符串形式返回)
     * @param token 需要被解析的JWT
     * @return 以字符串形式返回JWT载荷中的内容
     * @throws ServiceException 若获取载荷时发生错误则抛出该异常
     */
    String toString(String token) throws ServiceException;

    /**
     * 根据 JSON Web Token 获得 payload (以Map形式返回)
     * @param token 需要被解析的JWT
     * @return 以Map形式返回JWT载荷中的内容
     * @throws ServiceException 若获取载荷时发生错误则抛出该异常
     */
    Map<String,Object> toMap(String token) throws ServiceException;

}
